package com.ordobill.flex.common;

import java.util.ArrayList;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.ibatis.sqlmap.client.SqlMapClient;
import com.ordobill.webapp.beans.Figures;
import com.ordobill.webapp.common.SqlMapClientManager;

public class FiguresTable {
    @SuppressWarnings("unused")
    private Log log = LogFactory.getFactory().getInstance(this.getClass().getName());
    private static SqlMapClient sqlMap = SqlMapClientManager.getSqlMapClient();
    
    /**
     * 수치테이블의 데이터를 Array형태로 반환하는 메소드 입니다.
     * 
     * @param projectUid 해당 Project의 Uid를 입력합니다.
     * @param figEqUid 호출하고자 하는 수치의 부모 Equipment에 대한 Uid를 입력합니다.
     * @return Figures[]
     * @throws Exception
     * 
     */
    @SuppressWarnings("unchecked")
    public static Figures[] figuresList(int projectUid, String figEqUid) throws Exception{

        ArrayList<Figures> getFiguresList = (ArrayList<Figures>) sqlMap.queryForList("Figures.list", new Figures(projectUid, figEqUid, 0));
        
        Figures[] figuresArr = new Figures[getFiguresList.size()];
        
        getFiguresList.toArray(figuresArr);
        
        return figuresArr;
    }
    
    /**
     * 
     * 수치테이블의 데이터를 Figures형태로 반환하는 메소드 입니다.
     * 
     * @param projectUid 해당 Project의 Uid를 입력합니다.
     * @param figEqUid 호출하고자 하는 수치의 부모 Equipment에 대한 Uid를 입력합니다.
     * @param figSelf 호출하고자 하는 수치의 Uid를 입력합니다.
     * @return Figures
     * @throws Exception
     * 
     */
    public static Figures figuresBean(int projectUid, String figEqUid, int figSelf) throws Exception{
        Figures getFigures = (Figures) sqlMap.queryForObject("Figures.list", new Figures(projectUid, figEqUid, figSelf));
        return getFigures;
    }
    
    /**
     * 
     * @param sqlMap Transaction 처리가된 sqlMap을 받아 Transaction 처리를 합니다.
     * @param figures
     * @return message : {@code message > 0 : true, message < 0 : false}
     * @throws Exception
     */
    public static int figuresInsert(SqlMapClient sqlMap, Figures[] figures) throws Exception {
        int message = -1;
        
        if(figures.length == 0){
            throw new Exception("Figures[]의 길이가 0입니다.");
        }
        
        if(figures.length > 0){
            for(Figures fig : figures){
                message = (Integer)sqlMap.insert("Figures.figuresInsert", fig);
                
                if(message < 0){
                    return message;
                }
            }
        }
        
        return message;
    }
    
    /**
     * 
     * @param sqlMap Transaction 처리가된 sqlMap을 받아 Transaction 처리를 합니다.
     * @param figures
     * @return message : {@code message > 0 : true, message < 0 : false}
     * @throws Exception
     */
    public static int figuresUpdate(SqlMapClient sqlMap, Figures[] figures) throws Exception {
        int message = -1;
        
        if(figures.length == 0){
            throw new Exception("Figures[]의 길이가 0입니다.");
        }
        
        if(figures.length > 0){
            for(Figures fig : figures){
                message = sqlMap.update("Figures.figuresUpdate",fig);
                
                if(message < 0){
                    return message;
                }
            }
        }

        return message;
    }
    
    /**
     * 
     * @param sqlMap Transaction 처리가된 sqlMap을 받아 Transaction 처리를 합니다.
     * @param figures
     * @return message : {@code message > 0 : true, message < 0 : false}
     * @throws Exception
     */
    public static int figuresDelete(SqlMapClient sqlMap, Figures[] figures) throws Exception {
        int message = -1;
        
        if(figures.length == 0){
            throw new Exception("Figures[]의 길이가 0입니다.");
        }
        
        if(figures.length > 0){
            Figures fig = figures[0];
            message = sqlMap.delete("Figures.figuresPreDelete", fig);
            
            if(message < 0){
                return message;
            }
            
        }
        
        return message;
    }
    
    /**
     * 
     * @param sqlMap Transaction 처리가된 sqlMap을 받아 Transaction 처리를 합니다.
     * @param figUid Figures ID
     * @return message : {@code message > 0 : true, message < 0 : false}
     * @throws Exception
     */
    public static int figursDelete(SqlMapClient sqlMap, int figUid) throws Exception {
        int message = -1;
        
        if(figUid == 0){
            throw new Exception("figUid값이 0입니다.");
        }
        
        if(figUid != 0){
            message = sqlMap.delete("Figures.figuresDelete", new Figures(figUid));
        }
        
        return message;
    }
}
